{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第7章 集成学习和随机森林\n",
    "- 如果你聚合一组预测器（比如分类器或回归器）的预测，\n",
    "- 得到的预测结果也比最好的单个预测器要好。\n",
    "- 这样的一组预测器， 我们称为集成，\n",
    "- 所以这种技术， 也被称为集成学习，\n",
    "- 而一个集成学习的算法则被称为集成方法。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "toc-hr-collapsed": true
   },
   "source": [
    "# 投票分类器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 实验\n",
    "- 假设你已经训练好了一些分类器， 每个分类器的准确率约为80%。\n",
    "- 大概包括：\n",
    "- 一个逻辑回归分类器、 \n",
    "- 一个SVM分类器、 \n",
    "- 一个随机\n",
    "- 森林分类器、\n",
    "- 一个K-近邻分类器，\n",
    "- 或许还有更多\n",
    "\n",
    "![](img/7-1.png)\n",
    "\n",
    "- 这时， 要创建出一个更好的分类器，\n",
    "- 最简单的办法就是聚合每个分类器的预测，\n",
    "- 然后将得票最多的结果作为预测类别。\n",
    "- 这种大多数投票分类器被称为硬投票分类器\n",
    "\n",
    "![](img/7-2.png)\n",
    "\n",
    "- 这个投票法分类器的准确率通常比集成中最好的分类器还要高。\n",
    "- 事实上，即使每个分类器都是弱学习器（意味着它仅比随机猜测好一点），\n",
    "- 通过集成依然可以实现一个强学习器（高准确率），\n",
    "- 只要有足够大数量并且足够多种类的弱学习器就可以。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 大数定理\n",
    "- 假设你有一个略微偏倚的硬币，它有51%的可能正面数字朝上，49%的可能背面花朝上。\n",
    "- 在1000次投掷后，大多数为正面朝上”的概率接近75%。投掷硬币的次数越多，这个概率越高（例如，投掷10000次后，这个概率攀升至97%）。\n",
    "- 随着你不断投掷硬币，正面朝上的比率越来越接近于正面的概率（51%） \n",
    "\n",
    "![](img/7-3.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "toc-hr-collapsed": true
   },
   "source": [
    "## 代码示例"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 硬投票法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.ensemble import VotingClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.svm import SVC\n",
    "\n",
    "log_clf = LogisticRegression(random_state=42, solver='liblinear')\n",
    "rnd_clf = RandomForestClassifier(random_state=42, n_estimators=10)\n",
    "svm_clf = SVC(gamma=\"auto\", random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import make_moons\n",
    "from sklearn.model_selection import train_test_split\n",
    "X, y = make_moons(n_samples=500, noise=0.30, random_state=42)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "VotingClassifier(estimators=[('lr',\n",
       "                              LogisticRegression(C=1.0, class_weight=None,\n",
       "                                                 dual=False, fit_intercept=True,\n",
       "                                                 intercept_scaling=1,\n",
       "                                                 l1_ratio=None, max_iter=100,\n",
       "                                                 multi_class='warn',\n",
       "                                                 n_jobs=None, penalty='l2',\n",
       "                                                 random_state=42,\n",
       "                                                 solver='liblinear', tol=0.0001,\n",
       "                                                 verbose=0, warm_start=False)),\n",
       "                             ('rf',\n",
       "                              RandomForestClassifier(bootstrap=True,\n",
       "                                                     class_weight=None,\n",
       "                                                     criterion='gin...\n",
       "                                                     n_estimators=10,\n",
       "                                                     n_jobs=None,\n",
       "                                                     oob_score=False,\n",
       "                                                     random_state=42, verbose=0,\n",
       "                                                     warm_start=False)),\n",
       "                             ('svc',\n",
       "                              SVC(C=1.0, cache_size=200, class_weight=None,\n",
       "                                  coef0=0.0, decision_function_shape='ovr',\n",
       "                                  degree=3, gamma='auto', kernel='rbf',\n",
       "                                  max_iter=-1, probability=False,\n",
       "                                  random_state=42, shrinking=True, tol=0.001,\n",
       "                                  verbose=False))],\n",
       "                 flatten_transform=True, n_jobs=None, voting='hard',\n",
       "                 weights=None)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "voting_clf = VotingClassifier(\n",
    "    estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],\n",
    "    voting='hard'\n",
    ")\n",
    "voting_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression 0.864\n",
      "RandomForestClassifier 0.872\n",
      "SVC 0.888\n",
      "VotingClassifier 0.896\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "for clf in (log_clf, rnd_clf, svm_clf, voting_clf):\n",
    "    clf.fit(X_train, y_train)\n",
    "    y_pred = clf.predict(X_test)\n",
    "    print(clf.__class__.__name__, accuracy_score(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 软投票法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 如果所有分类器都能够估算出类别的概率（即有predict_proba（）方法），\n",
    "- 那么你可以将概率在所有单个分类器上平均，\n",
    "- 然后让Scikit-Learn给出平均概率最高的类别作为预测。这被称为软投票法。 \n",
    "- 通常来说， 它比硬投票法的表现更优， \n",
    "- 因为它给予那些高度自信的投票更高的权重。\n",
    "- 而所有你需要做的就是用voting=\"soft\"代替voting=\"hard\"，\n",
    "- 并确保所有分类器都可以估算出概率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression 0.864\n",
      "RandomForestClassifier 0.872\n",
      "SVC 0.888\n",
      "VotingClassifier 0.912\n"
     ]
    }
   ],
   "source": [
    "log_clf = LogisticRegression(random_state=42, solver='liblinear')\n",
    "rnd_clf = RandomForestClassifier(random_state=42, n_estimators=10)\n",
    "svm_clf = SVC(gamma=\"auto\", random_state=42, probability=True)\n",
    "\n",
    "voting_clf = VotingClassifier(\n",
    "    estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],\n",
    "    voting='soft'\n",
    ")\n",
    "voting_clf.fit(X_train, y_train)\n",
    "\n",
    "for clf in (log_clf, rnd_clf, svm_clf, voting_clf):\n",
    "    clf.fit(X_train, y_train)\n",
    "    y_pred = clf.predict(X_test)\n",
    "    print(clf.__class__.__name__, accuracy_score(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "toc-hr-collapsed": true
   },
   "source": [
    "# bagging和pasting"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 概念\n",
    "- 还有另一种方法是每个预测器使用的算法相同，\n",
    "- 但是在不同的训练集随机子集上进行训练。 采样时如果将样本放回，这种方法叫作bagging（bootstrap aggregating的缩写， 也叫自举汇聚法）；\n",
    "- 采样时样本不放回，这种方法则叫用pasting。\n",
    "\n",
    "![](img/7-4.png)\n",
    "\n",
    "- 一旦预测器训练完成， 集成就可以通过简单地聚合所有预测器的预测， 来对新实例做出预测。\n",
    "- 聚合函数通常是统计法（即最多数的预测好比硬投票分类器一样）用于分类，或是平均法用于回归。\n",
    "- 每个预测器单独的偏差都高于在原始训练集上训练的偏差，\n",
    "- 但是通过聚合，同时降低了偏差和方差。\n",
    "- 总体来说，最终结果是，与直接在原始训练集上训练的单个预测器相比，\n",
    "- 集成的偏差相近，但是方差更低。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 代码示例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import BaggingClassifier\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "bag_clf = BaggingClassifier(\n",
    "    DecisionTreeClassifier(random_state=42), n_estimators=500,\n",
    "    max_samples=100, bootstrap=True, n_jobs=-1\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "BaggingClassifier(base_estimator=DecisionTreeClassifier(class_weight=None,\n",
       "                                                        criterion='gini',\n",
       "                                                        max_depth=None,\n",
       "                                                        max_features=None,\n",
       "                                                        max_leaf_nodes=None,\n",
       "                                                        min_impurity_decrease=0.0,\n",
       "                                                        min_impurity_split=None,\n",
       "                                                        min_samples_leaf=1,\n",
       "                                                        min_samples_split=2,\n",
       "                                                        min_weight_fraction_leaf=0.0,\n",
       "                                                        presort=False,\n",
       "                                                        random_state=42,\n",
       "                                                        splitter='best'),\n",
       "                  bootstrap=True, bootstrap_features=False, max_features=1.0,\n",
       "                  max_samples=100, n_estimators=500, n_jobs=-1, oob_score=False,\n",
       "                  random_state=None, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bag_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = bag_clf.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.912"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.856"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree_clf = DecisionTreeClassifier(random_state=42)\n",
    "tree_clf.fit(X_train, y_train)\n",
    "y_pred = tree_clf.predict(X_test)\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib.colors import ListedColormap\n",
    "def plot_decision_boundary(clf, X, y, axes=[-1.5, 2.5, -1, 1.5], alpha=0.5, contour=True):\n",
    "    plt.plot(X[:,0][y==0], X[:, 1][y==0], 'yo')\n",
    "    plt.plot(X[:,0][y==1], X[:, 1][y==1], 'bs')\n",
    "    plt.xlim([axes[0], axes[1]])\n",
    "    plt.ylim([axes[2], axes[3]])\n",
    "    plt.xlabel('$x_1$', fontsize=16)\n",
    "    plt.ylabel('$x_2$', fontsize=16, rotation=0)\n",
    "    \n",
    "    x1s = np.linspace(axes[0], axes[1], 100)\n",
    "    x2s = np.linspace(axes[2], axes[3], 100)\n",
    "    x1, x2 = np.meshgrid(x1s, x2s)\n",
    "    X_new = np.c_[x1.ravel(), x2.ravel()]\n",
    "    y_pred = clf.predict(X_new).reshape(x1.shape)\n",
    "    custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0'])\n",
    "    plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap)\n",
    "    if contour:\n",
    "        custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50'])\n",
    "        plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 792x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(11,4))\n",
    "plt.subplot(121)\n",
    "plt.title('500个决策树的bagging集成')\n",
    "plot_decision_boundary(bag_clf, X, y)\n",
    "plt.subplot(122)\n",
    "plt.title('单个决策树')\n",
    "plot_decision_boundary(tree_clf, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 包外评估"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 对于任意给定的预测器， 使用bagging，\n",
    "- 有些实例可能会被采样多次，而有些实例则可能根本不被采样。\n",
    "- BaggingClassifier默认采样m个训练实例，然后放回样本（bootstrap=True），\n",
    "- m是训练集的大小。\n",
    "- 这意味着对于每个预测器来说， 平均只对63%的训练实例进行采样。剩余37%未被采样的训练实例称为包外（oob）实例。\n",
    "- 注意，对所有预测器来说，这是不一样的37%。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 既然预测器在训练的时候从未见过这些包外实例，\n",
    "- 正好可以用这些实例进行评估， 从而不需要单独的验证集或是交叉验证。\n",
    "- 将每个预测器在其包外实例上的评估结果进行平均， 你就可以得到对集成的评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.896"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bag_clf = BaggingClassifier(\n",
    "    DecisionTreeClassifier(random_state=42), n_estimators=500,\n",
    "    bootstrap=True, n_jobs=-1, oob_score=True\n",
    ")\n",
    "bag_clf.fit(X_train, y_train)\n",
    "bag_clf.oob_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.896"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred = bag_clf.predict(X_test)\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.38502674, 0.61497326],\n",
       "       [0.37195122, 0.62804878],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.08064516, 0.91935484],\n",
       "       [0.34517766, 0.65482234],\n",
       "       [0.00540541, 0.99459459],\n",
       "       [0.98941799, 0.01058201],\n",
       "       [0.94915254, 0.05084746],\n",
       "       [0.78651685, 0.21348315],\n",
       "       [0.00552486, 0.99447514],\n",
       "       [0.79347826, 0.20652174],\n",
       "       [0.84816754, 0.15183246],\n",
       "       [0.97536946, 0.02463054],\n",
       "       [0.02325581, 0.97674419],\n",
       "       [0.        , 1.        ],\n",
       "       [0.97814208, 0.02185792],\n",
       "       [0.94797688, 0.05202312],\n",
       "       [1.        , 0.        ],\n",
       "       [0.01522843, 0.98477157],\n",
       "       [0.35025381, 0.64974619],\n",
       "       [0.93406593, 0.06593407],\n",
       "       [1.        , 0.        ],\n",
       "       [0.96202532, 0.03797468],\n",
       "       [0.        , 1.        ],\n",
       "       [0.99428571, 0.00571429],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.62983425, 0.37016575],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.13636364, 0.86363636],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.40721649, 0.59278351],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.2       , 0.8       ],\n",
       "       [0.33684211, 0.66315789],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.02702703, 0.97297297],\n",
       "       [1.        , 0.        ],\n",
       "       [0.01086957, 0.98913043],\n",
       "       [1.        , 0.        ],\n",
       "       [0.89784946, 0.10215054],\n",
       "       [0.94818653, 0.05181347],\n",
       "       [0.95767196, 0.04232804],\n",
       "       [0.        , 1.        ],\n",
       "       [0.05524862, 0.94475138],\n",
       "       [0.98907104, 0.01092896],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.99438202, 0.00561798],\n",
       "       [0.79558011, 0.20441989],\n",
       "       [0.41081081, 0.58918919],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.73796791, 0.26203209],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.86666667, 0.13333333],\n",
       "       [1.        , 0.        ],\n",
       "       [0.59146341, 0.40853659],\n",
       "       [0.12169312, 0.87830688],\n",
       "       [0.65363128, 0.34636872],\n",
       "       [0.89690722, 0.10309278],\n",
       "       [0.        , 1.        ],\n",
       "       [0.18681319, 0.81318681],\n",
       "       [0.90659341, 0.09340659],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.08205128, 0.91794872],\n",
       "       [0.04278075, 0.95721925],\n",
       "       [0.28426396, 0.71573604],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.87434555, 0.12565445],\n",
       "       [0.00598802, 0.99401198],\n",
       "       [0.00555556, 0.99444444],\n",
       "       [0.00588235, 0.99411765],\n",
       "       [0.1875    , 0.8125    ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.92485549, 0.07514451],\n",
       "       [0.81437126, 0.18562874],\n",
       "       [0.00561798, 0.99438202],\n",
       "       [1.        , 0.        ],\n",
       "       [0.19075145, 0.80924855],\n",
       "       [0.65294118, 0.34705882],\n",
       "       [0.        , 1.        ],\n",
       "       [0.05670103, 0.94329897],\n",
       "       [0.56345178, 0.43654822],\n",
       "       [1.        , 0.        ],\n",
       "       [0.03333333, 0.96666667],\n",
       "       [0.98918919, 0.01081081],\n",
       "       [0.28205128, 0.71794872],\n",
       "       [0.57627119, 0.42372881],\n",
       "       [1.        , 0.        ],\n",
       "       [0.02234637, 0.97765363],\n",
       "       [0.98333333, 0.01666667],\n",
       "       [0.29508197, 0.70491803],\n",
       "       [0.93604651, 0.06395349],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.82978723, 0.17021277],\n",
       "       [1.        , 0.        ],\n",
       "       [0.00502513, 0.99497487],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.97752809, 0.02247191],\n",
       "       [1.        , 0.        ],\n",
       "       [0.0052356 , 0.9947644 ],\n",
       "       [0.93877551, 0.06122449],\n",
       "       [1.        , 0.        ],\n",
       "       [0.02439024, 0.97560976],\n",
       "       [0.28342246, 0.71657754],\n",
       "       [0.95628415, 0.04371585],\n",
       "       [0.30337079, 0.69662921],\n",
       "       [0.98979592, 0.01020408],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.72677596, 0.27322404],\n",
       "       [0.40606061, 0.59393939],\n",
       "       [0.34594595, 0.65405405],\n",
       "       [0.83783784, 0.16216216],\n",
       "       [0.95480226, 0.04519774],\n",
       "       [0.03428571, 0.96571429],\n",
       "       [0.81595092, 0.18404908],\n",
       "       [0.01142857, 0.98857143],\n",
       "       [0.        , 1.        ],\n",
       "       [0.01948052, 0.98051948],\n",
       "       [0.98342541, 0.01657459],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.01764706, 0.98235294],\n",
       "       [0.01081081, 0.98918919],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.96756757, 0.03243243],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.99393939, 0.00606061],\n",
       "       [0.        , 1.        ],\n",
       "       [0.37837838, 0.62162162],\n",
       "       [0.28108108, 0.71891892],\n",
       "       [0.02777778, 0.97222222],\n",
       "       [0.        , 1.        ],\n",
       "       [0.29444444, 0.70555556],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.00502513, 0.99497487],\n",
       "       [0.        , 1.        ],\n",
       "       [0.97727273, 0.02272727],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.00546448, 0.99453552],\n",
       "       [0.63157895, 0.36842105],\n",
       "       [0.88383838, 0.11616162],\n",
       "       [0.        , 1.        ],\n",
       "       [0.99484536, 0.00515464],\n",
       "       [0.98913043, 0.01086957],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.08510638, 0.91489362],\n",
       "       [1.        , 0.        ],\n",
       "       [0.02808989, 0.97191011],\n",
       "       [0.00510204, 0.99489796],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.04411765, 0.95588235],\n",
       "       [0.99484536, 0.00515464],\n",
       "       [0.94186047, 0.05813953],\n",
       "       [0.77297297, 0.22702703],\n",
       "       [0.6576087 , 0.3423913 ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.11764706, 0.88235294],\n",
       "       [1.        , 0.        ],\n",
       "       [0.95625   , 0.04375   ],\n",
       "       [0.99421965, 0.00578035],\n",
       "       [1.        , 0.        ],\n",
       "       [0.01058201, 0.98941799],\n",
       "       [0.        , 1.        ],\n",
       "       [0.45714286, 0.54285714],\n",
       "       [0.83606557, 0.16393443],\n",
       "       [0.        , 1.        ],\n",
       "       [0.00526316, 0.99473684],\n",
       "       [1.        , 0.        ],\n",
       "       [0.00546448, 0.99453552],\n",
       "       [0.        , 1.        ],\n",
       "       [0.9787234 , 0.0212766 ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.245     , 0.755     ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.98314607, 0.01685393],\n",
       "       [0.83832335, 0.16167665],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.09580838, 0.90419162],\n",
       "       [1.        , 0.        ],\n",
       "       [0.01104972, 0.98895028],\n",
       "       [0.        , 1.        ],\n",
       "       [0.04395604, 0.95604396],\n",
       "       [1.        , 0.        ],\n",
       "       [0.79234973, 0.20765027],\n",
       "       [0.        , 1.        ],\n",
       "       [0.89304813, 0.10695187],\n",
       "       [1.        , 0.        ],\n",
       "       [0.16393443, 0.83606557],\n",
       "       [0.25280899, 0.74719101],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.2459893 , 0.7540107 ],\n",
       "       [0.96045198, 0.03954802],\n",
       "       [0.0049505 , 0.9950495 ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.99382716, 0.00617284],\n",
       "       [0.        , 1.        ],\n",
       "       [0.51075269, 0.48924731],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.10362694, 0.89637306],\n",
       "       [0.09574468, 0.90425532],\n",
       "       [0.98404255, 0.01595745],\n",
       "       [0.01554404, 0.98445596],\n",
       "       [1.        , 0.        ],\n",
       "       [0.39226519, 0.60773481],\n",
       "       [0.10204082, 0.89795918],\n",
       "       [0.53038674, 0.46961326],\n",
       "       [0.61928934, 0.38071066],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.6       , 0.4       ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.21505376, 0.78494624],\n",
       "       [0.79213483, 0.20786517],\n",
       "       [0.05699482, 0.94300518],\n",
       "       [1.        , 0.        ],\n",
       "       [0.74418605, 0.25581395],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.13714286, 0.86285714],\n",
       "       [0.03191489, 0.96808511],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.93939394, 0.06060606],\n",
       "       [0.13812155, 0.86187845],\n",
       "       [0.94652406, 0.05347594],\n",
       "       [0.01382488, 0.98617512],\n",
       "       [0.61170213, 0.38829787],\n",
       "       [0.05479452, 0.94520548],\n",
       "       [0.99489796, 0.00510204],\n",
       "       [0.82911392, 0.17088608],\n",
       "       [0.        , 1.        ],\n",
       "       [0.98816568, 0.01183432],\n",
       "       [0.92857143, 0.07142857],\n",
       "       [0.        , 1.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.30113636, 0.69886364],\n",
       "       [0.99425287, 0.00574713],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.0052356 , 0.9947644 ],\n",
       "       [0.79213483, 0.20786517],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.72432432, 0.27567568],\n",
       "       [0.96195652, 0.03804348],\n",
       "       [1.        , 0.        ],\n",
       "       [0.67553191, 0.32446809],\n",
       "       [0.50588235, 0.49411765],\n",
       "       [0.00549451, 0.99450549],\n",
       "       [0.89473684, 0.10526316],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.89502762, 0.10497238],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.7591623 , 0.2408377 ],\n",
       "       [0.09375   , 0.90625   ],\n",
       "       [0.44102564, 0.55897436],\n",
       "       [0.20430108, 0.79569892],\n",
       "       [0.        , 1.        ],\n",
       "       [0.84146341, 0.15853659],\n",
       "       [0.82989691, 0.17010309],\n",
       "       [0.01169591, 0.98830409],\n",
       "       [1.        , 0.        ],\n",
       "       [0.99435028, 0.00564972],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.02222222, 0.97777778],\n",
       "       [0.9408867 , 0.0591133 ],\n",
       "       [0.94708995, 0.05291005],\n",
       "       [1.        , 0.        ],\n",
       "       [0.58100559, 0.41899441],\n",
       "       [1.        , 0.        ],\n",
       "       [0.00507614, 0.99492386],\n",
       "       [0.99441341, 0.00558659],\n",
       "       [0.01666667, 0.98333333],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [0.95953757, 0.04046243],\n",
       "       [0.00529101, 0.99470899],\n",
       "       [0.06321839, 0.93678161],\n",
       "       [0.00534759, 0.99465241],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.0052356 , 0.9947644 ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.09580838, 0.90419162],\n",
       "       [0.        , 1.        ],\n",
       "       [0.00518135, 0.99481865],\n",
       "       [0.        , 1.        ],\n",
       "       [0.41764706, 0.58235294],\n",
       "       [0.08163265, 0.91836735],\n",
       "       [0.22580645, 0.77419355],\n",
       "       [1.        , 0.        ],\n",
       "       [0.99435028, 0.00564972],\n",
       "       [0.26436782, 0.73563218],\n",
       "       [0.98870056, 0.01129944],\n",
       "       [0.00555556, 0.99444444],\n",
       "       [0.        , 1.        ],\n",
       "       [1.        , 0.        ],\n",
       "       [0.96195652, 0.03804348],\n",
       "       [0.32843137, 0.67156863],\n",
       "       [0.98837209, 0.01162791],\n",
       "       [1.        , 0.        ],\n",
       "       [0.01020408, 0.98979592],\n",
       "       [0.9947644 , 0.0052356 ],\n",
       "       [0.00588235, 0.99411765],\n",
       "       [0.03825137, 0.96174863],\n",
       "       [0.99404762, 0.00595238],\n",
       "       [1.        , 0.        ],\n",
       "       [0.04069767, 0.95930233],\n",
       "       [0.63101604, 0.36898396]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bag_clf.oob_decision_function_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Random Patches和随机子空间"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- BaggingClassifier也支持对特征进行抽样，\n",
    "- 这通过两个超参数控制：max_features和bootstrap_features。\n",
    "- 它们的工作方式跟max_samples和bootstrap相同，\n",
    "- 只是抽样对象不再是实例，而是特征。\n",
    "- 因此，每个预测器将用输入特征的随机子集进行训练。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 这对于处理高维输入（例如图像） 特别有用。\n",
    "- 对训练实例和特征都进行抽样， 被称为Random Patches方法。\n",
    "- 而保留所有训练实例（即bootstrap=False并且max_samples=1.0） 但是对特征进行抽样（即bootstrap_features=True并且/或max_features<1.0），这被称为随机子空间法。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "toc-hr-collapsed": true
   },
   "source": [
    "# 随机森林"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 代码实现"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 随机森林是决策树的集成，\n",
    "- 通常用bagging（有时也可能是pasting）方法训练，\n",
    "- 训练集大小通过max_samples来设置。\n",
    "- 除了先构建一个BaggingClassifier然后将结果传输到DecisionTreeClassifier，\n",
    "- 还有一种方法就是使用RandomForestClassifier类，这种方法更方便，\n",
    "- 对决策树更优化（同样，对于回归任务也有一个RandomForestRegressor类）。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.912"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, n_jobs=-1, random_state=42)\n",
    "rnd_clf.fit(X_train, y_train)\n",
    "y_pred_rf = rnd_clf.predict(X_test)\n",
    "accuracy_score(y_test, y_pred_rf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.912"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bag_clf = BaggingClassifier(\n",
    "    DecisionTreeClassifier(random_state=42, splitter='random', max_leaf_nodes=16),\n",
    "    n_estimators=500, max_samples=1.0, bootstrap=True, n_jobs=-1\n",
    ")\n",
    "bag_clf.fit(X_train, y_train)\n",
    "y_pred_bag = bag_clf.predict(X_test)\n",
    "accuracy_score(y_test, y_pred_bag)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 792x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(11, 4))\n",
    "plt.subplot(121)\n",
    "plt.title('内置随机森林')\n",
    "plot_decision_boundary(rnd_clf, X, y)\n",
    "plt.subplot(122)\n",
    "plt.title('bagging随机森林')\n",
    "plot_decision_boundary(bag_clf, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 极端随机树"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 随机森林里单棵树的生长过程中，\n",
    "- 每个节点在分裂时仅考虑到了一个随机子集所包含的特征。\n",
    "- 如果我们对每个特征使用随机阈值，\n",
    "- 而不是搜索得出的最佳阈值（如常规决策树），\n",
    "- 则可能让决策树生长得更加随机。\n",
    "- 这种极端随机的决策树组成的森林， 被称为极端随机树\n",
    "\n",
    "- 使用Scikit-Learn的ExtraTreesClassifier可以创建一个极端随机树分类器。\n",
    "- 它的API与RandomForestClassifier相同。\n",
    "- 同理，ExtraTreesRegressor与RandomForestRegressor的API也相同。\n",
    "\n",
    "- 通常来说，很难预先知道一个RandomForestClassifier是否会比一个ExtraTreesClassifier更好或是更差。\n",
    "- 唯一的方法是两种都尝试一遍， 然后使用交叉验证（还需要使用网格搜索调整超参数） 进行比较"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征重要性\n",
    "- 最后，如果你查看单个决策树会发现，\n",
    "- 重要的特征更可能出现在靠近根节点的位置，\n",
    "- 而不重要的特征通常出现在靠近叶节点的位置（甚至根本不出现）。\n",
    "- 因此，通过计算一个特征在森林中所有树上的平均深度，\n",
    "- 可以估算出一个特征的重要程度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "toc-hr-collapsed": true
   },
   "source": [
    "### 示例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sepal length (cm) 0.11249225099876375\n",
      "sepal width (cm) 0.02311928828251033\n",
      "petal length (cm) 0.4410304643639577\n",
      "petal width (cm) 0.4233579963547682\n"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "iris = load_iris()\n",
    "rnd_clf = RandomForestClassifier(random_state=42, n_estimators=500, n_jobs=-1)\n",
    "rnd_clf.fit(iris['data'], iris['target'])\n",
    "for name, score in zip(iris['feature_names'], rnd_clf.feature_importances_):\n",
    "    print(name, score)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 输出了每个特征的重要性。\n",
    "- 看起来最重要的特征是花瓣长度（44%）和宽度（42%），\n",
    "- 而花萼的长度和宽度则相对不那么重要（分别是11%和2%）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 如果你在MNIST数据集（见第3章） 上训练一个随机森林分类器， 然后绘制其每个像素的重要性\n",
    "\n",
    "![](img/7-6.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 提升法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## AdaBoost"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 概述\n",
    "- 新预测器对其前序进行纠正的办法之一，\n",
    "- 就是更多地关注前序拟合不足的训练实例。\n",
    "- 从而使新的预测器不断地越来越专注于难缠的问题，\n",
    "- 这就是AdaBoost使用的技术。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 例如，要构建一个AdaBoost分类器，\n",
    "- 首先需要训练一个基础分类器（比如决策树），\n",
    "- 用它对训练集进行预测。\n",
    "- 然后对错误分类的训练实例增加其相对权重，\n",
    "- 接着，使用这个最新的权重对第二个分类器进行训练，\n",
    "- 然后再次对训练集进行预测，继续更新权重， 并不断循环向前\n",
    "\n",
    "![](img/7-7.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 第一个分类器产生了许多错误实例， 所以这些实例的权重得到提升。\n",
    "- 因此第二个分类器在这些实例上的表现有所提升，\n",
    "- 然后第三个、第四个……右图绘制的是相同预测器序列，\n",
    "- 唯一的差别在于学习率减半（即每次迭代仅提升一半错误分类的实例的权重）。\n",
    "- 可以看出，AdaBoost这种依序循环的学习技术跟梯度下降有一些异曲同工之处，\n",
    "- 差别只在于——不再是调整单个预测器的参数使成本函数最小化，\n",
    "- 而是不断在集成中加入预测器， 使模型越来越好。\n",
    "\n",
    "<small>这种依序学习技术有一个重要的缺陷就是无法并行（哪怕只是一部分） ， 因为每个预测器只能在前一个预测器训练完成并评估之后才能开始训练。 因此， 在拓展方面， 它的表现不如bagging和pasting方法。</small>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AdaBoostClassifier(algorithm='SAMME.R',\n",
       "                   base_estimator=DecisionTreeClassifier(class_weight=None,\n",
       "                                                         criterion='gini',\n",
       "                                                         max_depth=1,\n",
       "                                                         max_features=None,\n",
       "                                                         max_leaf_nodes=None,\n",
       "                                                         min_impurity_decrease=0.0,\n",
       "                                                         min_impurity_split=None,\n",
       "                                                         min_samples_leaf=1,\n",
       "                                                         min_samples_split=2,\n",
       "                                                         min_weight_fraction_leaf=0.0,\n",
       "                                                         presort=False,\n",
       "                                                         random_state=None,\n",
       "                                                         splitter='best'),\n",
       "                   learning_rate=0.5, n_estimators=200, random_state=42)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import AdaBoostClassifier\n",
    "\n",
    "ada_clf = AdaBoostClassifier(\n",
    "    DecisionTreeClassifier(max_depth=1), n_estimators=200,\n",
    "    algorithm=\"SAMME.R\", learning_rate=0.5, random_state=42)\n",
    "ada_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.896"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred = ada_clf.predict(X_test)\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(ada_clf, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 练习预测器决策边界\n",
    "\n",
    "![](img/7-8.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数学推导\n",
    "- 第j个预测器的加权误差率\n",
    "$$ r_j=\\frac{\\sum_{i=1}^mw^{(i)}}{\\sum_{i=1}^mw^{(i)}} $$\n",
    "- 预测器权重\n",
    "$$\\alpha_j=\\eta log\\frac{1-r_j}{r_j}$$\n",
    "- 权重更新规则\n",
    "$$  w^{(i)}\\leftarrow\\begin{cases}\n",
    "w^{(i)} & (\\hat{y_j}^{(i)}=y^{(i)}) \\\\\n",
    "w^{(i)}exp(\\alpha_j) & (\\hat{y_j}^{(i)}\\neq y^{(i)})\n",
    "\\end{cases} $$\n",
    "- 然后将所有实例的权重归一化（即除以$ \\sum_{i=1}^mw^{(i)} $） 。\n",
    "- 最后，使用更新后的权重训练一个新的预测器，然后重复整个过程（计算新预测器的权重， 更新实例权重，然后对另一个预测器进行训练，等等）。当到达所需数量的预测器，或得到完美的预测器时，算法停止。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 预测的时候， AdaBoost就是简单地计算所有预测器的预测结果，\n",
    "- 并使用预测器权重αj对它们进行加权。 \n",
    "- 最后， 得到大多数加权投票的类别就是预测器给出的预测类别"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- AdaBoost预测\n",
    "$$ \\hat{y}(X)=argnax_k\\sum_{j=1}^N\\alpha_j $$\n",
    "$$ \\hat{y}_j(X)=k $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 代码示例"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Scikit-Learn使用的其实是AdaBoost的一个多分类版本， 叫作SAMME（基于多类指数损失函数的逐步添加模型）。\n",
    "- 当只有两个类别时，SAMME即等同于AdaBoost。\n",
    "- 此外，如果预测器可以估算类别概率（即具有predict_proba（）方法），\n",
    "- Scikit-Learn会使用一种SAMME的变体，称为SAMME.R（R代表“Real”），\n",
    "- 它依赖的是类别概率而不是类别预测， 通常表现更好。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AdaBoostClassifier(algorithm='SAMME.R',\n",
       "                   base_estimator=DecisionTreeClassifier(class_weight=None,\n",
       "                                                         criterion='gini',\n",
       "                                                         max_depth=1,\n",
       "                                                         max_features=None,\n",
       "                                                         max_leaf_nodes=None,\n",
       "                                                         min_impurity_decrease=0.0,\n",
       "                                                         min_impurity_split=None,\n",
       "                                                         min_samples_leaf=1,\n",
       "                                                         min_samples_split=2,\n",
       "                                                         min_weight_fraction_leaf=0.0,\n",
       "                                                         presort=False,\n",
       "                                                         random_state=None,\n",
       "                                                         splitter='best'),\n",
       "                   learning_rate=0.5, n_estimators=200, random_state=None)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import AdaBoostClassifier\n",
    "ada_clf = AdaBoostClassifier(\n",
    "    DecisionTreeClassifier(max_depth=1), n_estimators=200,\n",
    "    algorithm='SAMME.R', learning_rate=0.5\n",
    ")\n",
    "ada_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.896"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred = ada_clf.predict(X_test)\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 梯度提升"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 梯度提升也是逐步在集成中添加预测器，\n",
    "- 每一个都对其前序做出改正。\n",
    "- 不同之处在于， 它不是像AdaBoost那样在每个迭代中调整实例权重，\n",
    "- 而是让新的预测器针对前一个预测器的残差进行拟合。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 代码示例"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 首先，在训练集（比如带噪声的二次训练集）上拟合一个DecisionTreeRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(42)\n",
    "X = np.random.rand(100, 1) - 0.5\n",
    "y = 3*X[:, 0]**2 + 0.05 * np.random.randn(100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n",
       "                      max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
       "                      min_impurity_split=None, min_samples_leaf=1,\n",
       "                      min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "                      presort=False, random_state=42, splitter='best')"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeRegressor\n",
    "\n",
    "tree_reg1 = DecisionTreeRegressor(max_depth=2, random_state=42)\n",
    "tree_reg1.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 现在，针对第一个预测器的残差，训练第二个DecisionTreeRegressor："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n",
       "                      max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
       "                      min_impurity_split=None, min_samples_leaf=1,\n",
       "                      min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "                      presort=False, random_state=42, splitter='best')"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y2 = y - tree_reg1.predict(X)\n",
    "tree_reg2 = DecisionTreeRegressor(max_depth=2, random_state=42)\n",
    "tree_reg2.fit(X, y2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 然后， 针对第二个预测器的残差，训练第三个回归器："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n",
       "                      max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
       "                      min_impurity_split=None, min_samples_leaf=1,\n",
       "                      min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "                      presort=False, random_state=42, splitter='best')"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y3 = y2 - tree_reg2.predict(X)\n",
    "tree_reg3 = DecisionTreeRegressor(max_depth=2, random_state=42)\n",
    "tree_reg3.fit(X, y3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 现在， 我们有了一个包含三棵树的集成。 它将所有树的预测相加， 从而对新实例进行预测："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_new = np.array([[0.8]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = sum(tree.predict(X_new) for tree in (tree_reg1, tree_reg2, tree_reg3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.75026781])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 训练GBRT集成有个简单的方法， 就是使用Scikit-Learn的GradientBoosting-Regressor类。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,\n",
       "                          learning_rate=1.0, loss='ls', max_depth=2,\n",
       "                          max_features=None, max_leaf_nodes=None,\n",
       "                          min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                          min_samples_leaf=1, min_samples_split=2,\n",
       "                          min_weight_fraction_leaf=0.0, n_estimators=3,\n",
       "                          n_iter_no_change=None, presort='auto',\n",
       "                          random_state=42, subsample=1.0, tol=0.0001,\n",
       "                          validation_fraction=0.1, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import GradientBoostingRegressor\n",
    "gbrt = GradientBoostingRegressor(max_depth=2, n_estimators=3, learning_rate=1.0, random_state=42)\n",
    "gbrt.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.75026781])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred = gbrt.predict(X_new)\n",
    "y_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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eOyxx9h222177ff111/ntttuY8yYMX2WYc6cOUyZMoWuri4AXnnlFfbcc8/uRv8ilaDYWR0Uw6Qe1G0SC6pRkfR233137rvvPqZMmYK7A0Hv5ZUrV3Zv893vfpcFCxYAQa3FsmXLuu+bPn06U6dOZcCAAfz4xz/GzDAzxo4dC8D48eO718WXRO+//z7HHXccI0eOpLGxEYAddtiBHXbYgV//+telPHSRPil2Rp9imNSDuk5ik9Vij1vJz5577smdd97JH//4R37zm9/k9NgHH3yQV199lW984xs8+OCDbLnllqxZs4Y1a9YwceJEzjvvvO7biUuiM844g9dee42rrrqK/v37dy8zZszgxz/+ca918aW9vb2Yp0Aka4qd0aMYJvWgbjt2JavVHreSv09+8pM88sgjfOxjH8v6Me7OtGnTmDZtGltssQUXXXQRu+66K6eddhorVqxg/vz53HjjjXzgAx9Iu4+zzjqLG2+8kSOOOIK77767131NTU0sWrSI0aNH531cIsWk2BldimFS65TEhmq5x63kZunSpWzYsAGACRMm0NCQ/QWL6667jjVr1vCNb3yDWbNm8c9//pPf/e53fO1rX2PJkiU0NDRwxRVXALDlllsyffr0Xo8///zzueGGGzj++OP5/e9/36uNGkBXV1fKMl133XUcccQR+RyuSEEUO6NHMUzqhZJYgpqEN94IetuCetzWu2OPPZa///3vdHV18ec//5kjjzwy68e2tbXx2muvdY83+ZOf/IRtt92W4cOHc9ddd3HIIYcwfPhw3njjDf76179u9gUwefJkJk+ezD//+U/WrFmTshZj/vz5qsWQSFDsjCbFMKkXdd8mNn4p7Ne/DqalPflkXQ6Likq1s5s1axadnZ186EMf6rXe3fus0fjZz37G4sWLufrqq9ltt90466yz2GKLLTjuuON49913ue666/jxj3/MKaeckvLxH/vYx7ov/d1///2MHDmy1xKvxUhe/5e//KU4By+SJcXOvimGKYZJadV9TWzipTCA7bZTEI6CKLaz6+jooLm5OeM2w4YN48033+T8889nxowZtLS0AHDVVVfxiU98gqFDh/L++++zYcMG3J3333+/+7FbbLFFr30ddthhqsWQyFLszEwxTDFMSq/uk9h6nUYy6qLYzu7dd9/dLEgn6+zs5Mtf/jJHH300o0eP5v7772fYsGE8+eSTPPvsswwePLjX9om316xZ06uzxIwZM+jfv3/37VgsRkNDAzvuuGPK5166dCnDhg3L59Akjba2+p6dKxPFzswUwxTD6lm5YmfdJ7GaRjKaovQFuXbtWpqbm1m+fDk77LBDxm1vv/12Hn30UebMmcO1117LBz/4Qa688krmzZtHLBajq6uLpqYmZs+ezbHHHsuSJUvYuHEj/fv3p6mp5+N45JFHcuCBB7Lbbrt1rzv77LMBuPzyy0tzoNJLFGvSokSxMzPFMMWwelXO2Fn3bWJBA3dHUVRmBVq2bBmTJk3ijTfe4IUXXmD77bfPuH1rays///nPeeCBB3j77bdZtWoVxx13HI2Njdx5551MnDiRhoaG7sG/16xZww477MDzzz8PBG3IzIxtttmG3XffvddA4tOnT2f69OmbDTAeX/72t7+V/HzUk1Q1adKbYmd6imGKYfWqnLGz7mtis6XLiuXX2lrZc71+/XrOPPNMjjrqKAYNGsRzzz3HhAkTMj5m3LhxfOtb3+q+vWbNGt555x3GjBnDhRdeyJe//OVeHStGjBjBJz/5SU4//XRmz57NYYcd1j27DkB7ezsXXHABt912GzvttBNdXV289NJLfPWrX+X888/v7kEsxRelmrRqVs+xUzFMMawelTN21lUSO++teTRfnLlReyru0BWffvo+aPlbE5cfehln7HdGcQsokfHUU0+xYsUKzjzzTK644grOOeccttlmG/bZZ5+Mj3v22Wd57LHHmDt3Lk8++SQvvPAC06ZNY/jw4axdu5Zvf/vbmz3mpz/9Kbvssgu33HILxx13HBB0wPj973/PBRdcwN57783cuXP56U9/CsCtt97KSSedxLhx4zjnnHM4/vjjGTp0aPFPQp3T5fLQvHnQR2egdGIOE7tgYni7c/AWNP35T8G1RikpxTCplHLGzrpKYnHojHX2vV0qjT3/bop1cu9L9yqJrWF77703v/jFLzj99NO57777uPrqq/n5z3/e5/A0v/rVr3jkkUc44IADOOuss2htbWXo0KHstttuXHPNNbz55pu0tLQwc+ZMttxySwDGjBnDOeecw4wZM9h5553505/+xK233sqoUaO45pprOPzww3s9x5gxY3jwwQf505/+xA9/+EOmTZvGoYceyjHHHMOXvvSlkp2TelTpmrTI6MwvbjaQ1GbtvbXw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\n",
      "text/plain": [
       "<Figure size 792x792 with 6 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_predictions(regressors, X, y, axes, label=None, style=\"r-\", data_style=\"b.\", data_label=None):\n",
    "    x1 = np.linspace(axes[0], axes[1], 500)\n",
    "    y_pred = sum(regressor.predict(x1.reshape(-1, 1)) for regressor in regressors)\n",
    "    plt.plot(X[:, 0], y, data_style, label=data_label)\n",
    "    plt.plot(x1, y_pred, style, linewidth=2, label=label)\n",
    "    if label or data_label:\n",
    "        plt.legend(loc=\"upper center\", fontsize=16)\n",
    "    plt.axis(axes)\n",
    "\n",
    "plt.figure(figsize=(11,11))\n",
    "\n",
    "plt.subplot(321)\n",
    "plot_predictions([tree_reg1], X, y, axes=[-0.5, 0.5, -0.1, 0.8], label=\"$h_1(x_1)$\", style=\"g-\", data_label=\"训练集\")\n",
    "plt.ylabel(\"$y$\", fontsize=16, rotation=0)\n",
    "plt.title(\"残差和树的预测\", fontsize=16)\n",
    "\n",
    "plt.subplot(322)\n",
    "plot_predictions([tree_reg1], X, y, axes=[-0.5, 0.5, -0.1, 0.8], label=\"$h(x_1) = h_1(x_1)$\", data_label=\"训练集\")\n",
    "plt.ylabel(\"$y$\", fontsize=16, rotation=0)\n",
    "plt.title(\"集成预测\", fontsize=16)\n",
    "\n",
    "plt.subplot(323)\n",
    "plot_predictions([tree_reg2], X, y2, axes=[-0.5, 0.5, -0.5, 0.5], label=\"$h_2(x_1)$\", style=\"g-\", data_style=\"k+\", data_label=\"残差\")\n",
    "plt.ylabel(\"$y - h_1(x_1)$\", fontsize=16)\n",
    "\n",
    "plt.subplot(324)\n",
    "plot_predictions([tree_reg1, tree_reg2], X, y, axes=[-0.5, 0.5, -0.1, 0.8], label=\"$h(x_1) = h_1(x_1) + h_2(x_1)$\")\n",
    "plt.ylabel(\"$y$\", fontsize=16, rotation=0)\n",
    "\n",
    "plt.subplot(325)\n",
    "plot_predictions([tree_reg3], X, y3, axes=[-0.5, 0.5, -0.5, 0.5], label=\"$h_3(x_1)$\", style=\"g-\", data_style=\"k+\")\n",
    "plt.ylabel(\"$y - h_1(x_1) - h_2(x_1)$\", fontsize=16)\n",
    "plt.xlabel(\"$x_1$\", fontsize=16)\n",
    "\n",
    "plt.subplot(326)\n",
    "plot_predictions([tree_reg1, tree_reg2, tree_reg3], X, y, axes=[-0.5, 0.5, -0.1, 0.8], label=\"$h(x_1) = h_1(x_1) + h_2(x_1) + h_3(x_1)$\")\n",
    "plt.xlabel(\"$x_1$\", fontsize=16)\n",
    "plt.ylabel(\"$y$\", fontsize=16, rotation=0)\n",
    "\n",
    "# save_fig(\"gradient_boosting_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 超参数learning_rate对每棵树的贡献进行缩放。如果你将其设置为低值，比如0.1，则需要更多的树来拟合训练集，但是预测的泛化效果通常更好。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Ukxi59M9f0NB5h568Q3Lq/pTWuHUyFdUeDmsUiqVxGkeyAXABBHpKCKdgTHAGwH7TAJe9XISt+9jZqb2fUw3lZWVzJ07lwEDBrBixQqWLl3KsGHDGDlyJB988AHLli2jT58+3HvvvdUrzOzdu5f58+czadIk7r//fjp27MiRRx7J0KFDOeWUU3j00Ue57LLLuOCCC3j++ed5//33AVi1alWdWstAP/nJT2jbti1nn30206dPZ9CgQRx99NE8+eSTPPLII9UJ5Pz586snEN+5cyfnnHMO559/Pi+88AK/+MUvuOWWWwDbR3PUqFFN9fKlhSSdniYusbNZ62y7QWsglUp7buzcUtK4JuygkyxH8gOcD3zt/PzI+bnO2ZYJ7AFywj3e8OHDTTBLlhhzxx32VtX15ZdfxrsIUfX++++b6667znTu3NkMHz7cvPrqq9Xbpk+fbqZPn159//nnnzeDBw82ubm5ZtKkSaZ///6mW7dupqqqyhw4cMCUlJSYTZs2maqqKnPllVeazMxM8+CDDxpjjLnssstMQUGBmTlzpmnfvr159NFHzcqVK81///tfc80115guXbpUn2ft2rVm6tSpJjMz0/z2t7+tfnzevHmmXbt25sQTTzQbNmwwW7ZsMSJiXn31VbN8+XLTv39/c+yxx5r9+/dX/21t2rQxV1xxhVmxYoX57LPPzF133WXy8vKMz+er93VJtffZqyVLjMnPNyYz097WFx+ApcZjvIvmTzRjZ6i46b5G1bHz2GONAQ2kSqW5JUuMOT/77+YVTjUbpJuNC088EXTfULHT81KGxpg5wJwQ2w4BrYNti5QuaZheVq1axdatW3n66aera/JCOeuss5g8eTILFy7k6aef5vPPP+fuu+8mMzOT/Px8evbsWb1vly5deO211xg/fjwAf/3rX+nSpQt//etf6dmzJ2eddRa33nor9957L82bN+fmm28G7ICZo48+mgEDBrB48eLqOSoBTjvtNJYtW8ZZZ53FP/7xD8aNG0f37t0ZNGgQQ4YMYcKECTzxxBPVUwiNHj2at956i9LSUp566iluv/12cnJyuPbaa3WeyAgl89RecYmd2VoDqZSysfLWyhn0YAO4Paj9vivDISbB5gkcMWKEWbp0abyLkXS++uqrBtd+TheVlZVku1+UUbRhw4Z6R1FXVFRUj/p2pxpau3YtvXv3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\n",
      "text/plain": [
       "<Figure size 792x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "gbrt = GradientBoostingRegressor(max_depth=2, n_estimators=3, learning_rate=0.1, random_state=42)\n",
    "gbrt.fit(X, y)\n",
    "\n",
    "gbrt_slow = GradientBoostingRegressor(max_depth=2, n_estimators=200, learning_rate=0.1, random_state=42)\n",
    "gbrt_slow.fit(X, y)\n",
    "\n",
    "plt.figure(figsize=(11, 4))\n",
    "plt.subplot(121)\n",
    "plt.title('n_estimators=3, learning_rate=0.1')\n",
    "plot_predictions([gbrt], X, y, axes=[-0.5, 0.5, -0.1, 0.8], label='集成预测')\n",
    "plt.subplot(122)\n",
    "plt.title('n_estimators=200, learning_rate=0.1')\n",
    "plot_predictions([gbrt_slow], X, y, axes=[-0.5, 0.5, -0.1, 0.8])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 预测器太少（左图） 和预测器太多（右图）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 要找到树的最佳数量，可以使用早期停止法（参见第4章）。\n",
    "- 简单的实现方法就是使用staged_predict（）方法：\n",
    "- 它在训练的每个阶段（一棵树时，两棵树时，等等）都对集成的预测返回一个迭代器。\n",
    "- 以下代码训练了一个拥有120棵树的GBRT集成，\n",
    "- 然后测量每个训练阶段的验证误差，\n",
    "- 从而找到树的最优数量，\n",
    "- 最后使用最优树数重新训练了一个GBRT集成："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import mean_squared_error\n",
    "X_train, X_val, y_train, y_val = train_test_split(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "gbrt = GradientBoostingRegressor(max_depth=2, n_estimators=120, random_state=42)\n",
    "gbrt.fit(X_train, y_train)\n",
    "\n",
    "errors = [mean_squared_error(y_val, y_pred) for y_pred in gbrt.staged_predict(X_val)]\n",
    "bst_n_estimator = np.argmin(errors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,\n",
       "                          learning_rate=0.1, loss='ls', max_depth=2,\n",
       "                          max_features=None, max_leaf_nodes=None,\n",
       "                          min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                          min_samples_leaf=1, min_samples_split=2,\n",
       "                          min_weight_fraction_leaf=0.0, n_estimators=67,\n",
       "                          n_iter_no_change=None, presort='auto',\n",
       "                          random_state=42, subsample=1.0, tol=0.0001,\n",
       "                          validation_fraction=0.1, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gbrt_best = GradientBoostingRegressor(max_depth=2, n_estimators=bst_n_estimator, random_state=42)\n",
    "gbrt_best.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(67, 0.0030248830463853182)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_error = np.min(errors)\n",
    "bst_n_estimator, min_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '最好的模型（67棵树）')"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 792x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(11, 4))\n",
    "plt.subplot(121)\n",
    "plt.plot(errors)\n",
    "plt.title('验证误差')\n",
    "plt.ylim(0, 0.01)\n",
    "plt.xlim(0, 120)\n",
    "plt.plot([bst_n_estimator, bst_n_estimator], [0, min_error], \"k--\")\n",
    "plt.plot([0, 120], [min_error, min_error], \"k--\")\n",
    "plt.plot(bst_n_estimator, min_error, \"ko\")\n",
    "plt.text(bst_n_estimator, min_error*1.2, \"最小误差\", ha=\"center\", fontsize=14)\n",
    "\n",
    "plt.subplot(122)\n",
    "plot_predictions([gbrt_best], X, y, axes=[-0.5,0.5,-0.1,0.8])\n",
    "plt.title('最好的模型（67棵树）')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 实际上， 要实现早期停止法，\n",
    "- 不一定需要先训练大量的树， 然后再回头找最优的数字，\n",
    "- 还可以真的提前停止训练。\n",
    "- 设置warm_start=True，当fit（）方法被调用时，\n",
    "- Scikit-Learn会保留现有的树，从而允许增量训练。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "gbrt = GradientBoostingRegressor(max_depth=2, warm_start=True)\n",
    "\n",
    "min_val_error = float('inf')\n",
    "error_going_up = 0\n",
    "for n_estimators in range(1, 120):\n",
    "    gbrt.n_estimators = n_estimators\n",
    "    gbrt.fit(X_train, y_train)\n",
    "    y_pred = gbrt.predict(X_val)\n",
    "    val_error = mean_squared_error(y_val, y_pred)\n",
    "    if val_error < min_val_error:\n",
    "        min_val_error = val_error\n",
    "        error_going_up = 0\n",
    "    else:\n",
    "        error_going_up += 1\n",
    "        if error_going_up == 5:\n",
    "            break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_predictions([gbrt], X, y, axes=[-0.5,0.5,-0.1,0.8])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 折叠法\n",
    "- 又称层叠泛化法\n",
    "- 它基于一个简单的想法：\n",
    "- 与其使用一些简单的函数（比如硬投票）来聚合集成中所有预测器的预测，\n",
    "- 我们为什么不训练一个模型来执行这个聚合呢？ \n",
    "- 图7-12显示了在新实例上执行回归任务的这样一个集成。\n",
    "- 底部的三个预测器分别预测了不同的值（3.1、 2.7和2.9），\n",
    "- 然后最终的预测器（称为混合器或元学习器）将这些预测作为输入，进行最终预测（3.0） 。\n",
    "\n",
    "![](img/7-12.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 训练混合器的常用方法是使用留存集。\n",
    "- 我们看看它是如何工作的。\n",
    "- 首先，将训练集分为两个子集，第一个子集用来训练第一层的预测器。\n",
    "\n",
    "![](img/7-13.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 然后， 用第一层的预测器在第二个（留存） 子集上进行预测。\n",
    "- 因为预测器在训练时从未见过这些实例，所以可以确保预测是“干净的”。\n",
    "- 那么现在对于留存集中的每个实例都有了三个预测值。\n",
    "- 我们可以使用这些预测值作为输入特征，创建一个新的训练集（新的训练集有三个维度），并保留目标值。\n",
    "- 在这个新的训练集上训练混合器， 让它学习根据第一层的预测来预测目标值。\n",
    "\n",
    "![](img/7-14.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 事实上， 通过这种方法可以训练多种不同的混合器（例如， 一个使用线性回归， 另一个使用随机森林回归， 等等） ： 于是我们可以得到一个混合器层。\n",
    "- 诀窍在于将训练集分为三个子集：\n",
    "- 第一个用来训练第一层，\n",
    "- 第二个用来创造训练第二层的新训练集（使用第一层的预测），\n",
    "- 而第三个用来创造训练第三层的新训练集（使用第二层的预测）。\n",
    "- 一旦训练完成， 我们可以按照顺序遍历每层来对新实例进行预测，\n",
    "\n",
    "![](img/7-15.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 不幸的是， Scikit-Learn不直接支持堆叠， 但是自己堆出stacking的实现品并不太难。 \n",
    "- 或者， 你也可以使用开源的实现方案， 例如brew（可从https://github.com/viisar/brew)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc-autonumbering": true
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
